MODIFICHE A SOMA (Secure and Open Mobile Agent)

In questo documento sono descritte tutte le modifiche apportate al
sistema SOMA, rispetto alla versione disponibile all'indirizzo
	http://www-lia.deis.unibo.it/Software/MA
Il sistema SOMA (noto anche come Mobile Agent Support release 2) 
sviluppato con il JDK 1.2 beta 2.

Per l'utilizzo con il sistema MARS (Mobile Agent Reactive Spaces) sono
utilizzati solo i tre seguenti package di SOMA:
	AgentSystem
	GateWay
	PlaceManager


Il riferimento a MARS

Ogni place di SOMA  fornito di uno spazio di tuple MARS.
Gli agenti di SOMA possono acquisire un riferimento allo spazio MARS
per mezzo dell'istruzione
	Space main = PlaceManager.P.TupleSpace(myId);
dove il parametro myId di classe AgentIdentity indica il ruolo
dell'agente.

Alla classe PlaceManager.Place sono state aggiunte le seguenti linee:
	import jive.javaSpace.*;
	import java.security.Principal;
	public class Place {
	...        
	private SpaceKernel TupleSpace;

	public Place(String nome) {
	...
        TupleSpace = MARS.init(Nome);
	}

	public Space TupleSpace(Principal id)
	throws SecurityException {
  	return TupleSpace.createReactiveSpace(id);
	}

	public Space PassiveTupleSpace(Principal id)
	throws SecurityException {
	return TupleSpace.createPassiveSpace(id);
	}
	...}


La clonazione degli agenti

Nella versione originale di SOMA gli agenti migrano da un place ad un
altro, cio di ogni agente esiste una sola istanza.
Per molti compiti, tra cui quello di ricerca di informazioni
presentato nell'Esempio 1,  necessario che gli agenti creino pi
copie di s, cio  necessario che siano in grado di clonarsi.
A tale scopo  stato modificato il meccanismo di mobilit degli
agenti, in modo tale che l'agente non venga rimosso dal place di
partenza, dopo che ne  stata creata una copia sul place di
destinazione.

Nella classe AgentSystem.AgentSystem, metodi go, le istruzioni
	AgentManager.dispose(agid,ag.getClass().toString());
sono state eliminate.


Installazione del Security Manager per RMI

Nella versione originale di SOMA viene installato il Security Manager
di default. Poich MARS usa i metodi RMI per la chiamata di metodi
remoti, nella versione modificata di SOMA viene installato il Security
Manager per RMI.

Nella classe AgentSystem.SecurityMan, metodo init, la linea
	System.setSecurityManager(new SecurityManager());
 stata sostituita con
	System.setSecurityManager(new RMISecurityManager());


Eccezioni lanciate dagli agenti

L'invocazione dei metodi degli agenti viene gestita attraverso
gli strumenti della reflection di Java.
Le eccezioni lanciate dall'interno di un tale metodo sono inglobate in
un'eccezione di tipo InvocationTargetException, quando l'eccezione
originaria esce dal metodo. La modifica effettuata permette di
recuperare l'eccezione originaria e si  rivelata molto utile in fase
di debugging.

Nella classe AgentSystem.Worker, metodo run, le linee
	try {
	first.invoke(My_Agent,null);
	} catch (Exception e) {
	e.printStackTrace();
sono state sostituite con
	try {
	first.invoke(My_Agent,null);
	} catch (InvocationTargetException e) {
	e.getTargetException().printStackTrace();


Bug

Per ovviare a errori a tempo di compilazione e d'esecuzione sono state
effettuate due modifiche a SOMA.

La classe AgentSystem.NodeName  ora dichiarata public.
La classe Starter  stata spostata nel package AgentSystem.
